package br.com.micronois.poker.model;

public class Carta implements Comparable<Carta> {

	private Naipe naipe;
	private String carta;
	private int valor;

	public Carta(Naipe naipe, int valor) {

		this.naipe = naipe;
		this.carta = atribuirCarta(valor);
		this.valor = valor;

	}

	private String atribuirCarta(int valor) {

		switch (valor) {

		case 1:
			return "A ";
		case 2:
			return "2 ";
		case 3:
			return "3 ";
		case 4:
			return "4 ";
		case 5:
			return "5 ";
		case 6:
			return "6 ";
		case 7:
			return "7 ";
		case 8:
			return "8 ";
		case 9:
			return "9 ";
		case 10:
			return "10";
		case 11:
			return "J ";
		case 12:
			return "Q ";
		case 13:
			return "K ";
			
			
		default:
			return "X ";

		}

	}

	private int atribuirValor(String carta) {

		switch (carta.toUpperCase()) {

		case "A":
			return 1;
		case "2":
			return 2;
		case "3":
			return 3;
		case "4":
			return 4;
		case "5":
			return 5;
		case "6":
			return 6;
		case "7":
			return 7;
		case "8":
			return 8;
		case "9":
			return 9;
		case "J":
			return 10;
		case "Q":
			return 11;
		case "K":
			return 12;

		default:
			return -1;

		}

	}

	public int getValor() {
		return valor;
	}

	public Naipe getNaipe() {
		return naipe;
	}

	@Override
	public String toString() {
		return "[" + carta + " " + naipe.getLabel() + "]";
	}

	/*
	 * metodo para comparação por valor da carta
	 */
	@Override
	public int compareTo(Carta cartaComparar) {

		int valorComparar = ((Carta) cartaComparar).getValor();

		int indice = ((Carta) cartaComparar).getNaipe().getValor() * 10;

		return (this.valor * indice) - (valorComparar * indice);

	}

	// public static Comparator<Carta> CartaNaipeValorComparator = new
	// Comparator<Carta>() {
	//
	// public int compare(Carta fruit1, Carta fruit2) {
	//
	// int fruitName1 = fruit1.getFruitName().toUpperCase();
	// int fruitName2 = fruit2.getFruitName().toUpperCase();
	//
	// //ascending order
	// return fruitName1.compareTo(fruitName2);
	//
	// // descending order
	// // return fruitName2.compareTo(fruitName1);
	// }

	// };

}
